#ifndef GAME_H
#define GAME_H

#include <SFML/Graphics.hpp>
#include <vector>
#include <random>
#include "point.h"
#include "snake.h"
#include "food.h"
#include "constants.h"

class Game {
private:
    bool gameOver = false;
    bool gameStarted = false;
    int playerScore = 0;
    int ai1Score = 0;
    int ai2Score = 0;
    sf::RenderWindow window;
    std::mt19937 rng;
    sf::Font font;
    int gameSpeed = BASE_SPEED;

    Snake playerSnake;
    Snake aiSnake1;
    Snake aiSnake2;
    Food food;
    
    int ai1DirFrames = 0;
    const int MIN_DIR_FRAMES = 3;
    int ai2DirFrames = 0;

    // 单人模式按钮
    sf::RectangleShape singlePlayerButton;
    sf::Text singlePlayerText;
    bool singlePlayerButtonHovered = false;
    // 局域网模式按钮
    sf::RectangleShape onlineModeButton;   
    sf::Text onlineModeText;               
    bool onlineModeButtonHovered = false;  
    bool isOnlineMode = false;            

    // AI1方向决策（追逐食物）
    Direction getAIDirection(const Snake& aiSnake, Direction currentDir, int& dirFrames);
    
    // AI2方向决策（优先躲避玩家，再追逐食物）
    Direction getAI2Direction();

    // 检查位置是否安全（无边界碰撞、无自身碰撞、无其他蛇碰撞）
    bool isSafe(const Point& pos, const Snake& selfSnake);

    // 初始化按钮
    void initButtons();

public:
    // 构造函数（初始化窗口、蛇、食物、字体）
    Game();
    
    // 处理输入（键盘+鼠标）
    void handleInput();
    
    // 更新游戏状态（蛇移动、碰撞检测、分数更新）
    void update();
    
    // 绘制游戏元素（蛇、食物、UI界面）
    void draw();
    
    // 游戏主循环
    void run();
    
    // 生成食物（避免落在蛇身上）
    void generateFood();
};

#endif // GAME_H